﻿///////////////////////////////////////////////////////////////////////////////
///
/// Cylan Client Core
/// Copyright (C) Shenzhen Cylan Tech. Co., Ltd. 2012
///
/// @file       Define.h
/// @brief      公共宏定义
///
///////////////////////////////////////////////////////////////////////////////
#ifndef CYLAN_DEFINE_H
#define CYLAN_DEFINE_H

/**
 * @def CC_CORE_MAKEVER
 * @brief 定义核心库版本号
 * @param maj 主版本
 * @param min 副版本
 * @param rev 修订版本
 * @param bld 编译版本
 */
#define CC_CORE_MAKEVER(maj, min, rev, bld) \
                                    (((maj) & 0xFF) << 24) | (((min) & 0xFF) << 16) | \
                                    (((rev) & 0xFF) << 8) | ((bld) & 0xFF)

/**
 * @def CC_CORE_VER_MAJOR
 * @brief 获取主版本
 */
#define CC_CORE_VER_MAJOR(v)        ((v) >> 24)

/**
 * @def CC_CORE_VER_MINOR
 * @brief 获取副版本
 */
#define CC_CORE_VER_MINOR(v)        (((v) >> 16) & 0xFF)

/**
 * @def CC_CORE_VER_REV
 * @brief 获取修订版本
 */
#define CC_CORE_VER_REV(v)          (((v) >> 8) & 0xFF)

/**
 * @def CC_CORE_VER_BUILD
 * @brief 获取编译版本
 */
#define CC_CORE_VER_BUILD(v)        ((v) & 0xFF)


/**
 * @def CC_HAS_FLAG
 * @brief 判断是v是否包含标记f
 */
#define CC_HAS_FLAG(v, f)           ((f) == ((v) & (f)))

/**
 * @def CC_SET_FLAG
 * @brief 对v设置f标记
 */
#define CC_SET_FLAG(v, f)           (v) |= (f)

/**
 * @def CC_UNSET_FLAG
 * @brief 对v清除f标记
 */
#define CC_UNSET_FLAG(v, f)         (v) &= ~(f)


/**
 * @def CC_MAX_URL
 * @brief 最大URL长度
 */
#define CC_MAX_URL                  256


/**
 * @def CC_NAME_LEN
 * @brief 一般名称长度
 */
#define CC_NAME_LEN                 64

/**
 * @def CC_SESSION_LEN
 * @brief SessionID长度
 */
#define CC_SESSION_LEN              64


#ifndef MIN
#define MIN(a, b)                   ((a) > (b) ? (b) : (a))
#endif

#ifndef MAX
#define MAX(a, b)                   ((a) > (b) ? (a) : (b))
#endif

#endif /* CYLAN_DEFINE_H */
